#pragma once 
#include "eventloopthread.h"
namespace TinyRPC
{

EventLoopThread::EventLoopThread()
: m_thread(std::bind(&EventLoopThread::threadFunc, this)){
    sem_init(&m_eventLoopInitSem, 0, 0);
}

// 这里一定要等到m_loop初始化完成 才可以返回
EventLoop* EventLoopThread::start(){
    m_thread.start();
    sem_wait(&m_eventLoopInitSem);
    sem_destroy(&m_eventLoopInitSem);
    return m_loop;
}


void EventLoopThread::threadFunc(){
    EventLoop eventLoop;
    m_loop = &eventLoop;
    // 初始化currentEventLoop
    // currentEventLoop = & eventLoop;
    
    sem_post(&m_eventLoopInitSem);
    eventLoop.loop();

}

} // namespace TinyRPC

